iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
自我挑戰組

Spring Boot 三十天挑戰賽系列 第 8

Day 08 - Directory Structure - Spring Boot 目錄結構

  • 分享至 

  • xImage
  •  

最近常常發生時間有限的資源分配問題,遇到補班日上班就更需要提振精神QQ
Let's play Fight Song by Rachel Platten,跟自己說:我、可、以!
Yes

如 Day 8 主題,當我們使用 Spring Initializr 或 Spring Boot CLI 生成一個新的 Spring Boot 項目時,會發現 Spring Boot 有一個很具結構性的目錄布局,這個目錄結構能更加方便的讓大家理解和擴展應用程式。
接下來將深入探討這個結構,以及為何這樣設計~

src/main/java

這是項目的主要 source code 目錄。所有的 Java 文件都應該放在這裡。一般來說,應用程式入口點(帶有 @SpringBootApplication 註解的 class) 會放在這個路徑下。
https://ithelp.ithome.com.tw/upload/images/20230923/201626822Yq35SY3zj.png

package com.meowmeow.ithomexdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class IthomexdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(IthomexdemoApplication.class, args);
    }
}

src/main/resources

這個目錄存放所有的資源文件,如配置文件、圖片、前端文件等。

  • application.propertiesapplication.yml:這是 Spring Boot 的主要配置文件。我們可以在這裡定義許多關於應用程式的設置:

    # 伺服器埠號設定
    server: 
      port: 8080
    
    # 資料庫設定
    spring:
      datasource: 
        url: jdbc:mysql://localhost:3306/mydb
        username: dbusername
        password: dbpassword
        driver-class-name: com.mysql.cj.jdbc.Driver
      jpa:
        hibernate:
    			# 資料庫結構自動更新設定
          ddl-auto: update
    		# 是否顯示 SQL 語句
        show-sql: true
        properties:
          hibernate:
    				# 使用的 Hibernate 方言
            dialect: org.hibernate.dialect.MySQL5Dialect
    
    logging:
      level:
        root: WARN
        org.springframework.web: DEBUG
        com.mycompany: TRACE
    
    # 啟用的配置檔
    profiles:
      active: dev
    
    # OAuth2安全性設定
    security:
      oauth2:
        client:
          registration:
            myclient:
              client-id: myClientId
              client-secret: myClientSecret
    
  • static:存放所有靜態資源,如 HTML、CSS、JavaScript 文件等。例如,可能會有一個作為主頁的 index.html

  • templates:存放模板引擎(如 Thymeleaf 或 FreeMarker)的模板文件。當你的應用程式需要動態生成 HTML 內容時(which means 前後端不分離的你儂我儂),將模板放在這個路徑下即可。

就只是偷渡一張有貓貓的 meme (ㄟ
只是想放有貓貓的 meme

src/test/java 和 src/test/resources

這兩個是測試程式碼和測試資源的目錄。使用 JUnit 和其他測試工具(例如 TestContainers),你可以撰寫單元測試或整合測試。

package com.meowmeow.ithomexdemo;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class IthomexdemoApplicationTests {
    @Test
    void contextLoads() {
    }
}

Maven 和 Gradle 配置文件

依據構建工具不同,使用 Maven 專案會使用 pom.xml,而對於 Gradle 來說會使用 build.gradle。這些文件用來定義項目的構建和管理 dependency 資訊。

.gitignore

如果使用 git 作為版本控制,.gitignore 文件是在告訴 git 忽略某些文件或目錄,請務必記得不應該被版控的內容都一定要放進 .gitignore 中

其他文件

  • README.md: Markdown 文件,用來說明這個專案的一切,如何構建、如何運行、用了哪些技術。一個好的專案也要搭配完整的說明文件,才能讓大家清楚專案的 details,如何撰寫 README 是很重要的議題!
  • Dockerfile:使用 Docker 容器化,Dockerfile 定義如何建立你的 Docker 的 image

Spring Boot 的目錄結構讓開發人員能夠迅速理解專案的布局和功能。比如說,只要看一下 src/main/java 就可以知道這是主要的業務邏輯所在。

另外,這種結構也有助於工具和插件的整合,同時也使得 CI/CD 自動化工具能更容易與專案配合。

結論

Spring Boot 的項目結構是經過精心設計的,旨在提供一個清晰、一致和功能豐富的開發體驗。無論是新手 like me 還是一個有經驗的開發人員,清楚了解這個結構可以幫助我們快速的開發 Spring Boot 應用程式!


上一篇
Day 07 - Useful Tools - 好用且強大的工具 (2)
下一篇
Day 09 - Spring Boot Application Properties - 配置與屬性
系列文
Spring Boot 三十天挑戰賽30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言